#include <iostream>
#include <windows.h>
#include "Const.h"
#include "Snake.h"

//��������������� ��������� ��������� ������ 
void start_snake(int* snake_x, int* snake_y, int& snake_size)
{
	int step_x = rand() % L + 1; // ����������� ��������� ��������� ��������� ������ 
	//step = 13;
	//snake_x[0] = 13;
	
	snake_x[0] = L / 2;
	snake_y[0] = Y / 2;

	for (int i = 1; i <snake_size; i++)
	{
		snake_x[i] = (L / 2) - i;
				
		if (snake_x[i] <= 0)
		{
			snake_x[i] = 1;
		}

		snake_y[i] = Y / 2;
		
	}
}

//��������������� ��������� ������ ������, ������ ������ ����������� ����������
void init_snake(int* snake_x, int* snake_y, int& snake_size)
{	
	std::cout << "Enter snake_size > 0. Snake_size must be <" << L << std::endl;
	std::cin >> snake_size;

	if (snake_size <= 0 || snake_size > L)//�������� �� ���������� ������ ��������.
	{
		std::cout << "Err! Wrong size " << std::endl;
		exit(1);
	}
		
	start_snake(snake_x, snake_y, snake_size);
	
}

// ������������� �������� ������. ��� �������� ������, �������� �������� ���������� �����
void move_snake(int* snake_x, int* snake_y, int& snake_size, DIRECTION& direction)
{//��� �������� ������, �������� �������� ���������� ����� �� 1 �������
	switch (direction)
	{
	case turn_left:
	{
		for (int i = snake_size - 1; i > 0; i--)
		{
			snake_x[i] = snake_x[i - 1];
			snake_y[i] = snake_y[i - 1];
		}

		snake_x[0]--;
		if (snake_x[0] == 0)
		{
			snake_x[0] = columns - 2;
		}
	}break;
	case turn_right:
	{		
		for (int i = snake_size - 1; i > 0; i--)
		{
			snake_x[i] = snake_x[i - 1];
			snake_y[i] = snake_y[i - 1];
		}

		snake_x[0]++;
		if (snake_x[0] == columns-1)
		{
			snake_x[0] = 1;
		}
	}break;
	case turn_up:
	{
		for (int i = snake_size - 1; i > 0; i--)
		{
			snake_x[i] = snake_x[i - 1];
			snake_y[i] = snake_y[i - 1];
		}

		snake_y[0]--;
		if (snake_y[0] == 0)
		{
			snake_y[0] = rows - 2;
		}

	}break;
	case turn_down:
	{		
		for (int i = snake_size - 1; i > 0; i--)
		{
			snake_x[i] = snake_x[i - 1];
			snake_y[i] = snake_y[i - 1];
		}
		
		snake_y[0]++;
		if (snake_y[0] == rows - 1)
		{
			snake_y[0] = 1;
		}
	}break;
	
	default:	break;	
	}	
}

void grow_snake(int* snake_x, int* snake_y, int& snake_size)
{
	int tmp = 1;

	for (int i = snake_size - 1; tmp > 0; tmp--)
	{
		snake_x[i] = snake_x[i - 1];
		snake_y[i] = snake_y[i - 1];
	}
}